Motion estimation in video compression exploits temporal redundancy within a video sequence for efficient coding. A block matching technique is widely used in the motion estimation. A purpose of the block matching technique is to find another block from a video object plane that matches a current block in a current video object plane. The matching block can be used to discover temporal redundancy in the video sequence thereby increasing the effectiveness of interframe video coding. Since a full motion estimation search for all possible hypothetical matches within a search range is intensive in terms of processing power, alternative sub-optimal techniques are commonly used. The sub-optimal techniques search a low number of hypotheses while maintaining a minimal amount of quality degradation.
A problem in implementing sub-optimal search patterns is the resulting non-subsequent memory accesses. The non-subsequent memory accesses are caused by having a starting point for each search pattern in a given iteration being determined by the best hypothesis of the previous iteration. Such accesses to memory involve stalls (i.e., dead cycles within a core pipeline) which occur between each iteration. The stalls increase the number of processing cycles used in the motion estimation to perform the block matching. The stalls are conventionally avoided by reading the entire search area into an internal zero wait state memory. However, reading the entire search area is a large internal expense and uses large die size memory.
It would be desirable to implement a cache prefetch during motion estimation.